﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace FGK
{
    class Promien
    {
        private Wektor start, koniec, kierunek;
        private float odleglosc;
        private bool kolizja;
        private Obiekt obiekt;
        private float osrodek;
        //dla fotonów
        private Kolor energia;

        public Promien(float sx, float sy, float sz, float kx, float ky, float kz)
        {
            start = new Wektor(sx, sy, sz);
            kierunek = new Wektor(kx, ky, kz);
            odleglosc = 0.0f;
            koniec = null;
            osrodek = 1.0f;
        }

        public Promien(Wektor s, Wektor k)
        {
            k.normalize();
            start = s;
            kierunek = k;
            odleglosc = 0.0f;
            osrodek = 1.0f;
            koniec = null;
            energia = new Kolor(0, 0, 0);
        }

        //dla fotonów
        public Promien(Wektor s, Wektor k, Kolor e)
        {
            k.normalize();
            start = s;
            kierunek = k;
            odleglosc = 0.0f;
            osrodek = 1.0f;
            koniec = null;
            energia = e;
        }

        public Kolor Energia
        {
            get { return energia; }
            set { energia = value; }
        }

        public float Osrodek
        {
            get { return osrodek; }
            set { osrodek = value; }
        }

        public Wektor Start
        {
            get { return start; }
            set { start = value; }
        }

        public Wektor Koniec
        {
            get { return koniec; }
            set { koniec = value; }
        }

        public Wektor Kierunek
        {
            get { return kierunek; }
            set { kierunek = value; }
        }

        public Obiekt Obiekt
        {
            get { return obiekt; }
            set { obiekt = value; }
        }

        public bool Kolizja
        {
            get { return kolizja; }
        }


        public float Odleglosc
        {
            get { return odleglosc; }
            set
            {
                if((kolizja)&&(odleglosc>value)) {
                    odleglosc = value;
                    koniec = new Wektor(start.X + odleglosc * kierunek.X, start.Y + odleglosc * kierunek.Y, start.Z + odleglosc * kierunek.Z);
                }
                else if ((!kolizja))
                {
                    odleglosc = value;
                    koniec = new Wektor(start.X + odleglosc * kierunek.X, start.Y + odleglosc * kierunek.Y, start.Z + odleglosc * kierunek.Z);
                    kolizja = true;
                }
            }
        }

        public void setOdleglosc(Obiekt zCzym, float o)
        {
            if ((kolizja) && (o < odleglosc))
            {
                odleglosc = o;
                koniec = new Wektor(start.X + odleglosc * kierunek.X, start.Y + odleglosc * kierunek.Y, start.Z + odleglosc * kierunek.Z);
                obiekt = zCzym;
            }
            else if ((!kolizja))
            {
                odleglosc = o;
                koniec = new Wektor(start.X + odleglosc * kierunek.X, start.Y + odleglosc * kierunek.Y, start.Z + odleglosc * kierunek.Z);
                kolizja = true;
                obiekt = zCzym;
            }

        }

        public override string ToString()
        {
            if (odleglosc!=0) return "Promień (" + start.X + "," + start.Y + "," + start.Z + " , " + kierunek.X + "," + kierunek.Y + "," + kierunek.Z + " , " + koniec.X + "," + koniec.Y + "," + koniec.Z + ")";
            else return "Promień (" + start.X + " , " + start.Y + " , " + start.Z + "   ,   " + kierunek.X + " , " + kierunek.Y + " , " + kierunek.Z + ")";
        }
    }
}
